const Koa=require("koa");
let app=new Koa();

/* 
koa中间件通过next函数控制中间件执行流程
koa中当一个中间件调用next(),则该中间件函数暂停并将控制传递给下一个中间件
当下游没有更多的中间件执行后，上游中间件会恢复执行 */


// next使用方法1：如：用于响应结束后的功能加载(日志记录、错误处理等)
app.use(async function(ctx,next){
    await next();
    console.log("响应结束");
});

// next使用方法2：用于中间件的功能控制(数据加载、地址处理、静态资源处理...)
app.use(async function(ctx,next){
    console.log("====>请求到达处理");

    // next函数被定义在中间件的逻辑代码中间，表示该函数的逻辑代码分为两个部分，一部分在下游中间件执行完成前执行，一部分在下游中间执行完成后执行
    await next();
    console.log("=======>响应结果处理");
});

// 该中间件没有next函数，因此定义在该中间件下游的中间件不会被执行
// koa开发中，以中间件调用next函数表示请求完成操作，开始响应结果的处理，并向上游中间件进行回转
app.use(async function(ctx){
    console.log("处理响应结果");
    ctx.body="<h1>测试koa服务器</h1>";
});

app.use(async function(ctx){
    console.log("最后的中间件");
   
});
app.listen(3000);